package com.example.schooljava.util;

import org.springframework.stereotype.Component;

import java.lang.reflect.Field;

/**
 * 将DTO中的值赋值给BO
 *
 * @author: LDH
 * @date: 2022年08月31日 14:24
 */
@Component
public class DTOtoBO {

    public DTOtoBO(){}

    public Object copyPro(Object from, Object target){
        // 获取来源对象的所有字段
        Class<?> clazz = from.getClass();
        Field[] field = clazz.getDeclaredFields();

        for (Field f : field) {
            // 开启私有属性访问权限
            f.setAccessible(true);
            try {
                // 如果值为null则跳过
                if (f.get(from) == null || f.get(from) == "") continue;
                // 获取目标对象的相应字段
                Field field1 = target.getClass().getDeclaredField(f.getName());
                // 开启私有属性访问权限
                field1.setAccessible(true);
                // 如果目标属性的当前字段为Long型，则将来源属性的当前字段转换类型后的值赋值
                if (field1.getGenericType().toString().equals("class java.lang.Long")){
                    field1.set(target, Long.parseLong(f.get(from).toString()));
                }
                else {
                    // 将来源属性的当前字段的值赋值给目标对象字段
                    field1.set(target, f.get(from));
                }
            } catch (IllegalAccessException | NoSuchFieldException e) {
                e.printStackTrace();
            }
        }
        return target;
    }
}